﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace DataBase.CronogramaDeActividades
{
    public class BDCronogramaActividades
    {
        static string cadena = @"Data Source=.\SQLEXPRESS;Initial Catalog=JCI;Integrated Security=True";
        public static bool NoExiste(int CI, int Gestion)
        {
            bool resp=false;
            try
            {
                //string cadena = @"Data Source=.\SQLEXPRESS;Initial Catalog=JCI;Integrated Security=True";
                SqlConnection conexion = new SqlConnection(cadena);
                conexion.Open();
                SqlDataAdapter adp = new SqlDataAdapter("select CodigoGestionCi from  GestionCi where GestionCi.Ci=@ci and  GestionCi.Gestion=@ges", conexion);
                adp.SelectCommand.Parameters.Add("@ci", SqlDbType.NVarChar).Value = CI;
                adp.SelectCommand.Parameters.Add("@ges", SqlDbType.Int).Value = Gestion;
                DataSet datos = new DataSet();
                adp.Fill(datos);
                conexion.Close();              
                if (datos.Tables[0].Rows.Count == 0)
                    resp = true;
                return resp;   
            }
            catch (Exception ex)
            {
                throw ex;
            }         
        }
        public static bool GuardarNuevaActividad(Model.CronogramaDeActividades.Actvididad actividad)
        {
            try
            {
                //string conexion = @"Data Source=.\SQLEXPRESS;Initial Catalog=TallerSImiParte;Integrated Security=True";
                SqlConnection canal = new SqlConnection(cadena);
                SqlCommand cmd = canal.CreateCommand();               
                cmd.CommandText = "Insert Into Actividad (Nombre, Descripcion) Values (@nombre, @descripcion)";                
                cmd.Parameters.AddWithValue("nombre", actividad.nombre);
                cmd.Parameters.AddWithValue("descripcion", actividad.descripcion);
                canal.Open();
                cmd.ExecuteNonQuery();
                if (NoExiste(Convert.ToInt32(actividad.Ci), actividad.gestion))
                {
                    cmd.CommandText = "Insert Into GestionCi (Ci, Gestion) Values (@ci, @ges)";
                    cmd.Parameters.AddWithValue("ci",Convert.ToInt32(actividad.Ci));
                    cmd.Parameters.AddWithValue("ges", actividad.gestion);
                    //canal.Open();
                    cmd.ExecuteNonQuery();
                }
                string codigo = ObtenerCodigo(Convert.ToInt32(actividad.Ci), actividad.gestion);
                cmd.CommandText = "Insert Into MiembroActividad (Nombre,Fecha,CodigoGestionCi) Values (@nom, @fec,@codigo)";
                cmd.Parameters.AddWithValue("nom",actividad.nombre);
                cmd.Parameters.AddWithValue("fec", actividad.fecha);
                cmd.Parameters.AddWithValue("codigo",Convert.ToInt32(codigo));
              //  canal.Open();
                cmd.ExecuteNonQuery();       
                return true;         
            }
            catch (SqlException)
            {
                throw new Exception("Ya tiene una actividad creada con este nombre");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private static string ObtenerCodigo(int CI, int Gestion)
        {
            try
            {
              //  string cadena = @"Data Source=.\SQLEXPRESS;Initial Catalog=TallerSImiParte;Integrated Security=True";
                SqlConnection conexion = new SqlConnection(cadena);
                conexion.Open();
                SqlDataAdapter adp = new SqlDataAdapter("select CodigoGestionCi from  GestionCi where GestionCi.Ci=@ci and  GestionCi.Gestion=@ges", conexion);
                adp.SelectCommand.Parameters.Add("@ci", SqlDbType.NVarChar).Value = CI;
                adp.SelectCommand.Parameters.Add("@ges", SqlDbType.Int).Value = Gestion;
                DataSet datos = new DataSet();
                adp.Fill(datos);
                conexion.Close();
                string resp = datos.Tables[0].Rows[0]["CodigoGestionCi"].ToString();
                return resp;
            }
            catch (Exception ex)
            {
                throw ex;
            }         
        }

        public static DataSet GetListaActividades(string CI, int Gestion)
        {
            try 
            {
               // string cadena = @"Data Source=.\SQLEXPRESS;Initial Catalog=TallerSImiParte;Integrated Security=True";
                SqlConnection conexion = new SqlConnection(cadena);
                conexion.Open();
                SqlDataAdapter adp = new SqlDataAdapter("select Actividad.Nombre,Descripcion,MiembroActividad.Fecha from  Actividad,MiembroActividad, GestionCi where Actividad.Nombre =MiembroActividad.Nombre and  GestionCi.CodigoGestionCi= MiembroActividad.CodigoGestionCi and  GestionCi.Ci=@ci and  GestionCi.Gestion=@ges", conexion);
                adp.SelectCommand.Parameters.Add("@ci",SqlDbType.NVarChar).Value=CI;
                adp.SelectCommand.Parameters.Add("@ges", SqlDbType.Int).Value = Gestion;
                DataSet datos = new DataSet();
                adp.Fill(datos);
                conexion.Close();             
                return datos;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static string ObtenerDescripcion(string p)
        {
            try
            {
               // string cadena = @"Data Source=.\SQLEXPRESS;Initial Catalog=TallerSImiParte;Integrated Security=True";
                SqlConnection conexion = new SqlConnection(cadena);
                conexion.Open();
                SqlDataAdapter adp = new SqlDataAdapter("select Descripcion from  Actividad where Actividad.Nombre=@nom", conexion);
                adp.SelectCommand.Parameters.Add("@nom", SqlDbType.NVarChar).Value = p;            
                DataSet datos = new DataSet();
                adp.Fill(datos);
                conexion.Close();
                string resp = datos.Tables[0].Rows[0]["Descripcion"].ToString();
                return resp;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static bool GuardarActividadExistente(Model.CronogramaDeActividades.Actvididad actividad)
        {
            try
            {
               // string conexion = @"Data Source=.\SQLEXPRESS;Initial Catalog=TallerSImiParte;Integrated Security=True";
                SqlConnection canal = new SqlConnection(cadena);
                SqlCommand cmd = canal.CreateCommand();
                canal.Open();
                if (NoExiste(Convert.ToInt32(actividad.Ci), actividad.gestion))
                {
                    cmd.CommandText = "Insert Into GestionCi (Ci, Gestion) Values (@ci, @ges)";
                    cmd.Parameters.AddWithValue("ci", Convert.ToInt32(actividad.Ci));
                    cmd.Parameters.AddWithValue("ges", actividad.gestion);
                    //canal.Open();
                    cmd.ExecuteNonQuery();
                }
                string codigo = ObtenerCodigo(Convert.ToInt32(actividad.Ci), actividad.gestion);
                cmd.CommandText = "Insert Into MiembroActividad (Nombre,Fecha,CodigoGestionCi) Values (@nom, @fec,@codigo)";
                cmd.Parameters.AddWithValue("nom", actividad.nombre);
                cmd.Parameters.AddWithValue("fec", actividad.fecha);
                cmd.Parameters.AddWithValue("codigo", Convert.ToInt32(codigo));
                //  canal.Open();
                cmd.ExecuteNonQuery();
                return true;    
            }
            catch (SqlException)
            {
                throw new Exception("No se pudo crear la actividad, ya tiene esta actividad creada en la mima fecha");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static List<string> listaNombres()
        {
            try
            {
             //   string cadena = @"Data Source=.\SQLEXPRESS;Initial Catalog=TallerSImiParte;Integrated Security=True";
                SqlConnection conexion = new SqlConnection(cadena);
                conexion.Open();
                SqlDataAdapter adp = new SqlDataAdapter("select Nombre from  Actividad", conexion);                
                DataSet datos = new DataSet();
                adp.Fill(datos);
                conexion.Close();
                List<string> lista = datos.Tables[0].AsEnumerable().Select(x => x.Field<string>("Nombre")).ToList();
                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static bool ExisteCi(Int64 p)
        {
            bool resp = true;
            try
            {               
                SqlConnection conexion = new SqlConnection(cadena);
                conexion.Open();
                SqlDataAdapter adp = new SqlDataAdapter("select CI from Miembro where Miembro.CI=@ci", conexion);
                adp.SelectCommand.Parameters.Add("@ci", SqlDbType.BigInt).Value = p;             
                DataSet datos = new DataSet();
                adp.Fill(datos);
                conexion.Close();
                if (datos.Tables[0].Rows.Count == 0)
                    resp = false;
                return resp;
            }
            catch (Exception ex)
            {
                throw ex;
            }         
        }
    }
}
